package com.cinema.view;

import com.cinema.entity.user.AbstractUser;
import com.cinema.service.UserService;
import com.cinema.util.InputUtil;

/**
 * 登录视图，处理用户登录交互
 */
public class LoginView {
    private final UserService userService = new UserService();

    /**
     * 显示登录菜单
     */
    public void showLoginMenu() {
        System.out.println("\n===== 影院管理系统 =====");
        System.out.println("1. 登录系统");
        System.out.println("2. 退出系统");
        System.out.print("请选择操作[1-2]：");

        int choice = InputUtil.getValidInt();
        switch (choice) {
            case 1:
                handleLogin();
                break;
            case 2:
                System.out.println("👋 感谢使用，再见！");
                System.exit(0);
                break;
            default:
                System.out.println("❌ 无效选择，请重试");
                showLoginMenu();
        }
    }

    /**
     * 处理登录逻辑
     */
    private void handleLogin() {
        System.out.println("\n===== 用户登录 =====");
        System.out.print("请输入用户名：");
        String username = InputUtil.getValidString();
        System.out.print("请输入密码：");
        String password = InputUtil.getValidString();

        // 验证登录
        AbstractUser user = userService.login(username, password);
        if (user == null) {
            System.out.println("❌ 用户名或密码错误");
            showLoginMenu();
            return;
        }

        // 首次登录强制修改密码
        if (user.needForceChangePwd()) {
            System.out.println("⚠️ 首次登录需修改初始密码");
            changeFirstLoginPassword(user);
        }

        // 登录成功，显示用户菜单
        System.out.println("\n✅ 登录成功，欢迎回来：" + user.getUsername());
        user.showMenu();

        // 退出后返回登录页
        showLoginMenu();
    }

    /**
     * 首次登录修改密码
     */
    private void changeFirstLoginPassword(AbstractUser user) {
        while (true) {
            System.out.print("请输入新密码：");
            String newPwd = InputUtil.getValidString();
            System.out.print("请确认新密码：");
            String confirmPwd = InputUtil.getValidString();

            if (!newPwd.equals(confirmPwd)) {
                System.out.println("❌ 两次密码不一致，请重试");
                continue;
            }
            if (newPwd.length() < 6) {
                System.out.println("❌ 密码长度不能少于6位，请重试");
                continue;
            }

            user.setPassword(newPwd);
            new UserService().updateUser(user);
            System.out.println("✅ 密码修改成功");
            break;
        }
    }
}

